package com.zzq.my.jetpacks.jectpackapp.utils;

import android.text.TextUtils;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.regex.Pattern;

/**
 * Created by zw on 2016/4/14 0014.
 */
public class MathUtils {

    // 默认除法运算精度
    private static final int DEFAULT_DIV_SCALE = 10;

    private static final int digit = 2;// 保留小数的位数PopupWindow
    //保留两位小数并展示千分位符
    private static final DecimalFormat df1 = new DecimalFormat("##,##0.00");

    public static String twoNumber(int number) {
        BigDecimal bigDecimal = new BigDecimal(Integer.toString(number));
        return bigDecimal.setScale(digit, BigDecimal.ROUND_HALF_UP).toString();
    }

    public static String twoNumber(float number) {
        BigDecimal bigDecimal = new BigDecimal(Float.toString(number));
        return bigDecimal.setScale(digit, BigDecimal.ROUND_HALF_UP).toString();
    }

    public static String twoNumber(double number) {
        BigDecimal bigDecimal = new BigDecimal(Double.toString(number));
        return bigDecimal.setScale(digit, BigDecimal.ROUND_HALF_UP).toString();
    }

//    public static String twoNumber(String number) {
//        if (TextUtils.isEmpty(number)) {
//            return "0.00";
//        }
//        BigDecimal bigDecimal = new BigDecimal(number);
//        return bigDecimal.setScale(digit, BigDecimal.ROUND_HALF_UP).toString();
//    }

    //需求修改需要保留后台下发多少位就是多少、后期需要保留2位在使用上面的方法放开
    //2020年11月17日 14:06:33  liangan
    public static String twoNumber(String number) {
        if (TextUtils.isEmpty(number)) {
            return "0.00";
        } else {
            return number;
        }
    }

    /**
     * 四舍五入保留2为小数点
     *
     * @param number
     * @return
     */
    public static String twoNumberMathResult(String number) {
        if (TextUtils.isEmpty(number)) {
            return "0.00";
        }
        BigDecimal bigDecimal = new BigDecimal(number);
        return bigDecimal.setScale(digit, BigDecimal.ROUND_HALF_UP).toString();
    }

    /**
     * String类型转换成int类型
     *
     * @param str
     * @return
     */
    public static int String2Int(String str) {
        if (TextUtils.isEmpty(str)) {
            return 0;
        }
        int result;
        if (str.contains(".")) {
            result = (int) Float.parseFloat(str);
        } else {
            result = Integer.parseInt(str);
        }
        return result;
    }

    /**
     * String类型转化称float类型
     *
     * @param str
     * @return
     */
    public static float String2Float(String str) {
        if (TextUtils.isEmpty(str)) {
            return 0.00f;
        }
        return Float.parseFloat(str);
    }

    /**
     * add by
     * 千位分隔符  如果存在小数点； 则小数点前面千位分隔符 否则直接千位分隔符
     *
     * @param num
     * @return
     */
    public static String FormatThousandsNumber(String num) {
        if (TextUtils.isEmpty(num)) {
            return "0";
        }
        if (new BigDecimal(num).compareTo(BigDecimal.ZERO) == 0) {
            return "0";
        }
        if (num.contains("."))//todo 如果存在小数点； 则小数点前面千位分隔符
        {
            String[] split = num.split("\\.");//分割
            StringBuffer tmp = new StringBuffer().append(split[0]).reverse();
            String retNum = Pattern.compile("(\\d{3})(?=\\d)").matcher(tmp.toString()).replaceAll("$1,");
            return new StringBuffer().append(retNum).reverse().toString() + "." + split[1];
        } else {
            //不存在小数点，直接千位分隔符
            StringBuffer tmp = new StringBuffer().append(num).reverse();
            String retNum = Pattern.compile("(\\d{3})(?=\\d)").matcher(tmp.toString()).replaceAll("$1,");
            return new StringBuffer().append(retNum).reverse().toString();
        }
    }


    /**
     * 保留两位小数并展示千分位符
     *
     * @return
     */
    public static String String2Thousands(String str) {
        if (TextUtils.isEmpty(str)) {
            return "0.00";
        }
        BigDecimal b = new BigDecimal(str);//10位
        return df1.format(b);
//        System.out.println(df1.format(0.2));// 0.20
//        System.out.println(df1.format(0.235));// 0.24
//        System.out.println(df1.format(0.2351));// 0.24
//        System.out.println(df1.format(42));// 42.00
//        System.out.println(df1.format(0.29));// 0.29
//        System.out.println(df1.format(999999999));//999,999,999.00
//        System.out.println(df1.format(0));//0.00
//        b=new BigDecimal("9999999999");//10位 十亿
//        System.out.println(df1.format(b));//9,999,999,999.00
//        b=new BigDecimal("9999999999999");//13位
//        System.out.println(df1.format(b));//9,999,999,999,999.00
    }

    /**
     * 2位小数，点后面不显示00
     *
     * @param bigDecimal
     * @return
     */
    public static String bigDecimal2Thousands(BigDecimal bigDecimal) {
        if (bigDecimal == null)
            return "0";
        if (bigDecimal.compareTo(BigDecimal.ZERO) == 0)
            return "0";
        return df1.format(bigDecimal);
    }

    /**
     * 判断是否存数字 （正数、负数、小数）
     *
     * @param str
     * @return
     */
    public static boolean isNumber(String str) {
        String reg = "^[-\\+]?([0-9]+\\.?)?[0-9]+$";
        return str.matches(reg);
    }

    /**
     * 判断纯数字的字符串是否等于0或者为空
     *
     * @return
     */
    public static boolean stringIsZeroNull(String zeroStr) {
        if (TextUtils.isEmpty(zeroStr)) {
            return true;
        }
        return new BigDecimal(zeroStr).compareTo(BigDecimal.ZERO) == 0;
    }


    //@TODO 0.00变为0  1.0 变为1 1.6600 变为1.66
    //@TODO 过滤多余的0
    public static String filterOtherZearo(String str) {
        if (TextUtils.isEmpty(str)) {
            return "0";
        }
        try {
            BigDecimal value = new BigDecimal(str);
            BigDecimal noZeros = value.stripTrailingZeros();
            String result = noZeros.toPlainString();
            return result;
        } catch (Exception e) {
            return "0";
        }
    }


}
